package com.yc.snack.controller;

import com.yc.snack.biz.IProductInfoBiz;
import com.yc.snack.biz.impl.ProductInfoBizImpl;
import com.yc.snack.entity.ProductInfo;
import com.yc.snack.util.RequestParamUtil;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@WebServlet("/product/*")
public class GoodsInfoController extends BaseController {

    /**
     * 处理富文本编辑器中的文件上传的
     *
     * @param request
     * @param response
     */
    protected void upload(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 第一个参数：servlet对象  第二个参数：请求对象  第三个参数：响应对象  第四个参数：错误页面地址    第五个参数：是否需要session   第六个参数：缓存大小  第七个参数：是否自动刷新缓存
        PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);
        Map<String, String> map = RequestParamUtil.upload(pageContext); // 返回是文件在服务器中的存放地址
        String path = map.get("upload"); // 注意：ckeditor中文件上传的文本框的 name = "upload"

        // 注意：富文本编辑器ckeditor图片上传要求的返回值是一个map对象，里面包含fileName：文件名称，url：文件在服务器中的地址，uploaded：回调函数
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("fileName", path.substring(path.lastIndexOf("_") + 1));
        result.put("url", "../../" + path);
        result.put("uploaded", "1");
        this.send(response, result);
        return;
    }

    /**
     * 处理富文本编辑器中的文件上传的
     *
     * @param request
     * @param response
     */
    protected void add(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 第一个参数：servlet对象  第二个参数：请求对象  第三个参数：响应对象  第四个参数：错误页面地址    第五个参数：是否需要session   第六个参数：缓存大小  第七个参数：是否自动刷新缓存
        PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);
        ProductInfo productInfo = RequestParamUtil.upload(ProductInfo.class, pageContext);
        System.out.println(productInfo);

        // 业务模型层
        IProductInfoBiz productInfoBiz = new ProductInfoBizImpl();
        int result = productInfoBiz.add(productInfo);

        // 响应
        if (result > 0) {
            this.send(response, 200, "成功");
            return;
        }
        this.send(response, 500, "失败");
    }

    /**
     * 第一次查询
     *
     * @param request
     * @param response
     */
    protected void findFist(HttpServletRequest request, HttpServletResponse response) throws IOException {
        int page = Integer.parseInt(request.getParameter("page"));
        int rows = Integer.parseInt(request.getParameter("rows"));

        IProductInfoBiz productInfoBiz = new ProductInfoBizImpl();
        Map<String, Object> map = productInfoBiz.findByFirst(page, rows);
        if (map == null || map.isEmpty()) {
            this.send(response, 600, "暂无数据");
            return;
        }
        this.send(response, 200, map);
    }

    /**
     * 分页
     * @param request
     * @param response
     */
    protected void finds(HttpServletRequest request, HttpServletResponse response) throws IOException {
        int page = Integer.parseInt(request.getParameter("page"));
        int rows = Integer.parseInt(request.getParameter("rows"));

        IProductInfoBiz productInfoBiz = new ProductInfoBizImpl();
        List<ProductInfo> list =  productInfoBiz.finds(page, rows);
        if (list == null || list.isEmpty()) {
            this.send(response, 600, "暂无数据");
            return;
        }
        this.send(response, 200, list);
    }


}
